package 泛型;

import java.util.ArrayList;

public class 泛型通配符 {
    //    通配符就表示任意的类型
//    如果不使用通配符的话即使传入的参数是规定参数的子类也会报错
//    还可以指定通配符的上限,也就是说传入的参数必须是extends的对象或者子类对象

    public static void showBox(Box<?> box) {
        System.out.println(box.get());
    }
//    public static void showBox(Box<? extends Number > box) {
//        System.out.println(box.get());
//    }
//    public static void showBox(Box<Number> box) {
//        System.out.println(box.get());
//    }
    private static void showAnimal(ArrayList<? extends 动物> list) {
//        如果是指定了通配符的上限的话,不能填充新的元素,因为不确定传入的是什么类型
//        list.add(new 动物());
        for (动物 动物 : list) {
            System.out.println(动物.name);
        }
    }
    private static void showCat(ArrayList<? super 猫科 > list) {
//        指定了通配符的下线可以填充新元素
//        list.add(new 猫科());
//        list.add(new 美短());
        for (Object o : list) {
            System.out.println(o);
        }
    }
    public static void main(String[] args) {
        Box<Long> stringBox = new Box<Long>();
        stringBox.set(10L);
        showBox(stringBox);
        Box<Integer> integerBox = new Box<Integer>();
        integerBox.set(1);
        showBox(integerBox);

    }
}
